package 每日一题;

/**
 * @description:
 * @author: 小白白
 * @create: 2021-11-04
 **/

public class No367有效的完全平方数 {

    /**
     * 给定一个 正整数 num ，编写一个函数，如果 num 是一个完全平方数，则返回 true ，否则返回 false 。
     * 进阶：不要 使用任何内置的库函数，如  sqrt 。
     * <p>
     * 示例 1：
     * 输入：num = 16
     * 输出：true
     * 示例 2：
     * 输入：num = 14
     * 输出：false
     *  
     * 提示：
     * 1 <= num <= 2^31 - 1
     */

    public boolean isPerfectSquare(int num) {

        int left = 0;
        int right = num;

        while (left <= right) {
            int mid = (right - left) / 2 + left;
            // 这里是关键,int型相乘结果还是int型,下一步才将int转为long
            long j = (long) mid * (long) mid;
            if (j > num) {
                right = mid - 1;
            } else if (j < num) {
                left = mid + 1;
            } else {
                return true;
            }
        }

        return false;
    }

    public static void main(String[] args) {
        No367有效的完全平方数 n = new No367有效的完全平方数();
        boolean result = n.isPerfectSquare(2147483647);
        System.out.println(result);
    }

}
